// Decompiled by Jad v1.5.8e. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://www.geocities.com/kpdus/jad.html
// Decompiler options: braces fieldsfirst space lnc
package com.google.zxing.aztec.decoder;
import com.google.zxing.FormatException;
import com.google.zxing.aztec.AztecDetectorResult;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.common.DecoderResult;
import com.google.zxing.common.reedsolomon.GenericGF;
import com.google.zxing.common.reedsolomon.ReedSolomonDecoder;
import com.google.zxing.common.reedsolomon.ReedSolomonException;
// Referenced classes of package com.google.zxing.aztec.decoder:
// b, a
public final class Decoder
{
private static final int a[] = {
0, 104, 240, 408, 608
};
private static final int b[] = {
0, 128, 288, 480, 704, 960, 1248, 1568, 1920, 2304,
2720, 3168, 3648, 4160, 4704, 5280, 5888, 6528, 7200, 7904,
8640, 9408, 10208, 11040, 11904, 12800, 13728, 14688, 15680, 16704,
17760, 18848, 19968
};
private static final int c[] = {
0, 17, 40, 51, 76
};
private static final int d[] = {
0, 21, 48, 60, 88, 120, 156, 196, 240, 230,
272, 316, 364, 416, 470, 528, 588, 652, 720, 790,
864, 940, 1020, 920, 992, 1066, 1144, 1224, 1306, 1392,
1480, 1570, 1664
};
private static final String e[] = {
"CTRL_PS", " ", "A", "B", "C", "D", "E", "F", "G", "H",
"I", "J", "K", "L", "M", "N", "O", "P", "Q", "R",
"S", "T", "U", "V", "W", "X", "Y", "Z", "CTRL_LL", "CTRL_ML",
"CTRL_DL", "CTRL_BS"
};
private static final String f[] = {
"CTRL_PS", " ", "a", "b", "c", "d", "e", "f", "g", "h",
"i", "j", "k", "l", "m", "n", "o", "p", "q", "r",
"s", "t", "u", "v", "w", "x", "y", "z", "CTRL_US", "CTRL_ML",
"CTRL_DL", "CTRL_BS"
};
private static final String g[] = {
"CTRL_PS", " ", "\001", "\002", "\003", "\004", "\005", "\006", "\007", "\b",
"\t", "\n", "\013", "\f", "\r", "\033", "\034", "\035", "\036", "\037",
"@", "\\", "^", "_", "`", "|", "~", "\177", "CTRL_LL", "CTRL_UL",
"CTRL_PL", "CTRL_BS"
};
private static final String h[] = {
"", "\r", "\r\n", ". ", ", ", ": ", "!", "\"", "#", "$",
"%", "&", "'", "(", ")", "*", "+", ",", "-", ".",
"/", ":", ";", "<", "=", ">", "?", "[", "]", "{",
"}", "CTRL_UL"
};
private static final String i[] = {
"CTRL_PS", " ", "0", "1", "2", "3", "4", "5", "6", "7",
"8", "9", ",", ".", "CTRL_UL", "CTRL_US"
};
private int j;
private int k;
private AztecDetectorResult l;
private int m;
public Decoder()
{
}
private static int a(boolean aflag[], int i1, int j1)
{
int k1 = 0;
for (int l1 = i1; l1 < i1 + j1; l1++)
{
k1 <<= 1;
if (aflag[l1])
{
k1++;
}
}
return k1;
}
private static b a(char c1)
{
switch (c1)
{
default:
return b.a;
case 76: // 'L'
return b.b;
case 80: // 'P'
return b.e;
case 77: // 'M'
return b.c;
case 68: // 'D'
return b.d;
case 66: // 'B'
return b.f;
}
}
private static String a(b b1, int i1)
{
switch (a.a[b1.ordinal()])
{
default:
return "";
case 2: // '\002'
return e[i1];
case 3: // '\003'
return f[i1];
case 4: // '\004'
return g[i1];
case 5: // '\005'
return h[i1];
case 6: // '\006'
return i[i1];
}
}
private String a(boolean aflag[])
{
int i1;
b b1;
b b2;
int j1;
StringBuilder stringbuilder;
boolean flag;
boolean flag1;
boolean flag2;
i1 = k * l.getNbDatablocks() - m;
if (i1 > aflag.length)
{
throw FormatException.getFormatInstance();
}
b1 = b.a;
b2 = b.a;
j1 = 0;
stringbuilder = new StringBuilder(20);
flag = false;
flag1 = false;
flag2 = false;
_L3:
if (flag)
{
break MISSING_BLOCK_LABEL_362;
}
boolean flag9;
if (flag1)
{
flag2 = true;
} else
{
b1 = b2;
}
a.a[b2.ordinal()];
JVM INSTR tableswitch 1 1: default 100
// 1 173;
goto _L1 _L2
_L1:
byte byte0 = 5;
if (b2 == b.d)
{
byte0 = 4;
}
int k1;
int l1;
boolean flag3;
boolean flag4;
int i2;
b b3;
boolean flag5;
boolean flag7;
if (i1 - j1 < byte0)
{
flag9 = flag1;
flag4 = true;
i2 = j1;
b3 = b2;
flag5 = flag9;
} else
{
int j2 = a(aflag, j1, byte0);
int k2 = j1 + byte0;
String s = a(b2, j2);
if (s.startsWith("CTRL_"))
{
b b4 = a(s.charAt(5));
boolean flag6;
boolean flag8;
if (s.charAt(6) == 'S')
{
flag5 = true;
flag4 = flag;
i2 = k2;
b3 = b4;
} else
{
flag5 = flag1;
flag4 = flag;
i2 = k2;
b3 = b4;
}
} else
{
stringbuilder.append(s);
flag8 = flag1;
flag4 = flag;
i2 = k2;
b3 = b2;
flag5 = flag8;
}
}
_L4:
if (flag2)
{
j1 = i2;
flag = flag4;
b2 = b1;
flag2 = false;
flag1 = false;
} else
{
flag6 = flag5;
b2 = b3;
j1 = i2;
flag = flag4;
flag1 = flag6;
}
if (true) goto _L3; else goto _L2
_L2:
if (i1 - j1 < 8)
{
flag7 = flag1;
flag4 = true;
i2 = j1;
b3 = b2;
flag5 = flag7;
} else
{
k1 = a(aflag, j1, 8);
l1 = j1 + 8;
stringbuilder.append((char)k1);
flag3 = flag1;
flag4 = flag;
i2 = l1;
b3 = b2;
flag5 = flag3;
}
goto _L4
return stringbuilder.toString();
}
private boolean[] a(BitMatrix bitmatrix)
{
boolean aflag[];
int i1;
int j1;
int k1;
int l1;
int i2;
if (l.isCompact())
{
if (l.getNbLayers() > a.length)
{
throw FormatException.getFormatInstance();
}
aflag = new boolean[a[l.getNbLayers()]];
j = c[l.getNbLayers()];
} else
{
if (l.getNbLayers() > b.length)
{
throw FormatException.getFormatInstance();
}
aflag = new boolean[b[l.getNbLayers()]];
j = d[l.getNbLayers()];
}
i1 = l.getNbLayers();
j1 = bitmatrix.getHeight();
k1 = 0;
l1 = 0;
i2 = j1;
for (int j2 = i1; j2 != 0;)
{
int k2 = 0;
int l2 = 0;
for (; k2 < -4 + i2 * 2; k2++)
{
aflag[l1 + k2] = bitmatrix.get(k1 + l2, k1 + k2 / 2);
aflag[k2 + (-4 + (l1 + i2 * 2))] = bitmatrix.get(k1 + k2 / 2, (-1 + (k1 + i2)) - l2);
l2 = (l2 + 1) % 2;
}
int i3 = 1 + i2 * 2;
int j3 = 0;
for (; i3 > 5; i3--)
{
aflag[1 + (-8 + (l1 + i2 * 4) + (i2 * 2 - i3))] = bitmatrix.get((-1 + (k1 + i2)) - j3, -1 + (k1 + i3 / 2));
aflag[1 + (-12 + (l1 + i2 * 6) + (i2 * 2 - i3))] = bitmatrix.get(-1 + (k1 + i3 / 2), k1 + j3);
j3 = (j3 + 1) % 2;
}
int k3 = k1 + 2;
int l3 = l1 + (-16 + i2 * 8);
int i4 = j2 - 1;
i2 -= 4;
j2 = i4;
k1 = k3;
l1 = l3;
}
return aflag;
}
private static BitMatrix b(BitMatrix bitmatrix)
{
int i1 = 1 + 2 * ((-1 + bitmatrix.getWidth()) / 2 / 16);
BitMatrix bitmatrix1 = new BitMatrix(bitmatrix.getWidth() - i1, bitmatrix.getHeight() - i1);
int j1 = 0;
int k1 = 0;
while (j1 < bitmatrix.getWidth())
{
if ((bitmatrix.getWidth() / 2 - j1) % 16 != 0)
{
int l1 = 0;
int i2 = 0;
while (l1 < bitmatrix.getHeight())
{
if ((bitmatrix.getWidth() / 2 - l1) % 16 != 0)
{
if (bitmatrix.get(j1, l1))
{
bitmatrix1.set(k1, i2);
}
i2++;
}
l1++;
}
k1++;
}
j1++;
}
return bitmatrix1;
}
private boolean[] b(boolean aflag[])
{
GenericGF genericgf;
int i1;
int j1;
int k1;
int ai[];
if (l.getNbLayers() <= 2)
{
k = 6;
genericgf = GenericGF.AZTEC_DATA_6;
} else
if (l.getNbLayers() <= 8)
{
k = 8;
genericgf = GenericGF.AZTEC_DATA_8;
} else
if (l.getNbLayers() <= 22)
{
k = 10;
genericgf = GenericGF.AZTEC_DATA_10;
} else
{
k = 12;
genericgf = GenericGF.AZTEC_DATA_12;
}
i1 = l.getNbDatablocks();
if (l.isCompact())
{
j1 = a[l.getNbLayers()] - j * k;
k1 = c[l.getNbLayers()] - i1;
} else
{
j1 = b[l.getNbLayers()] - j * k;
k1 = d[l.getNbLayers()] - i1;
}
ai = new int[j];
for (int l1 = 0; l1 < j; l1++)
{
int l3 = 1;
int i4 = 1;
for (; l3 <= k; l3++)
{
if (aflag[j1 + ((l1 * k + k) - l3)])
{
ai[l1] = i4 + ai[l1];
}
i4 <<= 1;
}
}
boolean aflag1[];
int i2;
try
{
(new ReedSolomonDecoder(genericgf)).decode(ai, k1);
}
catch (ReedSolomonException reedsolomonexception)
{
throw FormatException.getFormatInstance();
}
m = 0;
aflag1 = new boolean[i1 * k];
i2 = 0;
int i3;
for (int j2 = 0; i2 < i1; j2 = i3)
{
int k2 = 1 << -1 + k;
int l2 = 0;
boolean flag = false;
i3 = j2;
int j3 = k2;
int k3 = 0;
while (k3 < k)
{
boolean flag1;
if ((j3 & ai[i2]) == j3)
{
flag1 = true;
} else
{
flag1 = false;
}
if (l2 == -1 + k)
{
if (flag1 == flag)
{
throw FormatException.getFormatInstance();
}
i3++;
m = 1 + m;
l2 = 0;
flag = false;
} else
{
if (flag == flag1)
{
l2++;
} else
{
l2 = 1;
flag = flag1;
}
aflag1[(k3 + i2 * k) - i3] = flag1;
}
j3 >>>= 1;
k3++;
}
i2++;
}
return aflag1;
}
public DecoderResult decode(AztecDetectorResult aztecdetectorresult)
{
l = aztecdetectorresult;
BitMatrix bitmatrix = aztecdetectorresult.getBits();
if (!l.isCompact())
{
bitmatrix = b(l.getBits());
}
return new DecoderResult(null, a(b(a(bitmatrix))), null, null);
}
}